import java.util.ArrayList;
import java.util.Arrays;

public class Graph {
    private ArrayList<String> vertexList;//存储定义的集合
    private int[][] edges; //存储图对应的邻接矩阵
    private int numOfEdges; //表示边的数目
    //定义给数组boolean[],记录某个结点是否被访问
    private boolean[] isVisited;

    //构造器
    public Graph(int n) {
        edges = new int[n][n];
        vertexList = new ArrayList<String>(n);
        numOfEdges = 0;//不写默认也是这个
        isVisited = new boolean[5];
    }
    //得到一个邻接结点的下标(如果存在就返回对应下标，否则返回-1)
    public int getFirstNeightbor(int index) {
        for (int j = 0;j<vertexList.size();j++) {
            if(edges[index][j]>0) {
                return j;
            }
        }
        return -1;
    }
    //根据前一个邻接结点的下标来获取下一个邻接结点

    //图中常用的方法
    //返回节点的个数
    public int getNumOfVertex() {
        return vertexList.size();
    }
    //得到边的数目
    public int getNumOfEdges() {
        return numOfEdges;
    }
    //返回结点i下标对应的数据(0代表A，1代表B，2代表C依次类推）
    public String getValueByIndex(int i) {
        return vertexList.get(i);
    }
    //返回v1和v2的权值
    public int getWeight(int v1, int v2) {
        return edges[v1][v2];
    }
    //显示图对应的矩阵(遍历二维数组edges)
    public void showGraph() {
        for (int[] link : edges) {
            System.out.println(Arrays.toString(link));
        }
    }
    //插入节点
    public void insertVertex(String vertex) {
        vertexList.add(vertex);
    }
    //添加边(v1代表第一个点的下标 v2代表第二个点的下标 weight代表权值）
    public void insertEdge(int v1, int v2 ,int weight) {
        edges[v1][v2] = weight;
        edges[v2][v1] = weight;
        numOfEdges++;
    }
    public static void main(String[] args) {
        //测试图是否创建ok
        int n = 5;
        String Vertex[] = {"A", "B", "C", "D", "E"};
        //创建图对象
        Graph graph = new Graph(n);
        //循环的添加顶点
        for (String vertex : Vertex) {
            graph.insertVertex(vertex);
        }
        //添加边(A-B A-C B-C B-D B-E)
        graph.insertEdge(0,1,1);//A-B
        graph.insertEdge(0,2,1);
        graph.insertEdge(1,2,1);
        graph.insertEdge(1,3,1);
        graph.insertEdge(1,4,1);
        //显示邻接矩阵
        graph.showGraph();
    }
}
